package controllers

import (
	"fmt"
	"encoding/json"

	"yikexing.com.cn/wyws/models"
	"yikexing.com.cn/wyws/bus"
)

// 数据字典
type DictController struct {
	BaseController
}

// @Title 新建一个数据字典
// @Description 新建一个字典
// @Param       sessionId       query   string                   true   "用户标示"
// @Param	body            body 	models.DictCommand	 true	"字典实体"
// @Success 200 {object} models.ReturnInfo
// @router / [post]
func (u *DictController) Post() {

	var cmd models.DictCommand
	err := json.Unmarshal(u.Ctx.Input.RequestBody, &cmd)
	if err != nil {
		u.returnFormatJsonData(1, nil, fmt.Sprintf("json转换失败,请检查json格式或参数,错误信息:%s ", err.Error()))
		u.ServeJSON()
		return
	}
	//验证
	err = u.checkCommand(cmd)
	if err != nil {
		u.returnFormatJsonData(1, nil, err.Error())
		u.ServeJSON()
		return
	}
	//入库
	d := models.AddDict{DictCommand:cmd}
	err = bus.Dispatch(&d)
	if err != nil {
		u.returnFormatJsonData(1, nil, err.Error())
	} else {
		u.returnFormatJsonData(0, d.DictResults, "新建数据字典成功")
	}
	u.ServeJSON()
}

// @Title 更新字典
// @Description 更新字典
// @Param       sessionId       query   string                  true            "用户标示"
// @Param	id		path 	string	                true		"字典的唯一标示"
// @Param	body		body 	models.UpdateDict	true		"字典的内容实体"
// @Success 200 {object} models.ReturnInfo
// @router /:id [put]
func (u *DictController) Put() {

	id, err := u.GetInt(":id")
	if err != nil {
		u.returnFormatJsonData(1, nil, "检查id是否正确")
		u.ServeJSON()
		return
	}

	var cmd models.UpdateDict
	err = json.Unmarshal(u.Ctx.Input.RequestBody, &cmd)
	if err != nil {
		u.returnFormatJsonData(1, nil, fmt.Sprintf("json转换失败,请检查json格式或参数,错误信息:%s ", err.Error()))
		u.ServeJSON()
		return
	}
	if id > 0 && cmd.Id != id {
		cmd.Id = id
	}

	//入库
	err = bus.Dispatch(&cmd)
	if err != nil {
		u.returnFormatJsonData(1, nil, err.Error())
	} else {
		u.returnFormatJsonData(0, cmd.DictResults, "更新字典成功")
	}
	u.ServeJSON()
}

// @Title 获取所有的字典
// @Description 获取所有根字典
// @Param       sessionId       query   string  true      "用户标示"
// @Param	Offset	        query 	string	true	  "偏移量"
// @Param	Max	        query 	string	true	  "行数"
// @Param	DictType	query 	string	false	  "字典类型"
// @Success 200 {object} models.ReturnInfo
// @router / [get]
func (u *DictController) GetAll() {

	max, err := u.GetInt("Max")
	offset, err := u.GetInt("Offset")
	dictType := u.GetString("DictType")

	if err != nil {
		u.returnFormatJsonData(1, nil, fmt.Sprintf("json转换失败,请检查json格式或参数,错误信息:%s ", err.Error()))
		u.ServeJSON()
		return
	}

	d := models.GetAllDict{Max:max, Offset:offset,DictType:dictType }
	err = bus.Dispatch(&d)
	if err != nil {
		u.returnFormatJsonData(1, nil, err.Error())
	} else {
		u.returnFormatJsonData(0, d.DictResults, "获取所有的根字典成功")
	}
	u.ServeJSON()
}

// @Title 删除字典
// @Description 删除字典
// @Param       sessionId       query   string  true      "用户标示"
// @Param	id		path 	string	true	  "字典id"
// @Success 200 {object} models.ReturnInfo
// @router /:id [delete]
func (u *DictController) Delete() {

	id, err := u.GetInt(":id")
	if err != nil {
		u.returnFormatJsonData(1, nil, "检查id是否正确")
		u.ServeJSON()
		return
	}

	d := models.DeleteDict{Id:id}
	err = bus.Dispatch(&d)
	if err != nil {
		u.returnFormatJsonData(1, nil, err.Error())
	} else {
		u.returnFormatJsonData(0, nil, "删除数据字典成功")
	}

	u.ServeJSON()
}
// @Title 查询同一类型的字典
// @Description 查询同一类型的字典
// @Param       sessionId       query   string  true      "用户标示"
// @Param	dictType        path 	string	true      "字典类型"
// @Success 200 {object} models.ReturnInfo
// @router /:dictType [get]
func (u *DictController) GetDictType() {

	dictType := u.GetString(":dictType")

	d := models.GetAllDict{Max:999999, Offset:0,DictType:dictType }
	err := bus.Dispatch(&d)
	if err != nil {
		u.returnFormatJsonData(1, nil, err.Error())
	} else {
		u.returnFormatJsonData(0, d.DictResults, "获取所有的根字典成功")
	}
	u.ServeJSON()
}




